# 身份运算符	描述
# is	判断两个标识符是否引用同一个对象，是的话返回真，否则返回假
# is not	判断两个标识符是否不是引用同一个对象，是的话返回真，否则返回假


# num 和 num1 都被赋值为整数 10，
# 由于 10 在这个预定义的小整数范围内，所以它们实际上引用的是同一个内存空间。
num = 10
num1 = 10
# print(num is num1)

num = ''
num2 = ""
# print(num is num2)
# print(num is not num2)

# 3.8 运算的优先级
# 运算符	描述
# **	幂 (最高优先级)
# ~ + -	按位取反，一元运算符（正负号）
# * / % //	乘、除、取余数、取整除
# + -	加法、减法
# << >>	左移，右移
# &	按位与
# `	^`
# > < >= <=	比较运算符
# == !=	等于运算符
# = += -= *= /= %= //= **=	赋值运算符
# is is not
# in not in
# not or and	逻辑运算符

print('y' < 'x' and 'x' == False)
print(1 < 2 and 2 > 4 and 4 < 9)
print(1 < 2 > 4 < 9)
print('y' < 'x' == False)
# 浮点数的表示和计算存在精度误差。0.1 和 0.2 这两个数字在二进制下无法精确表示，
# 因此在进行加法运算时会产生误差，导致结果不等于 0.3。可以使用 round()
# 函数或者 decimal 模块来解决这个问题。

# 这个问题涉及到浮点数在计算机内部的表示方式。在计算机科学中，尤其是使用浮点数表示法（如IEEE 754标准）时，小数并不能完全精确地存储。尤其对于像0.1和0.2这样的十进制小数，在转换为二进制浮点数时，它们会变成无限循环小数，而在有限的存储空间内只能存储其近似值。
# 具体来说，当我们在计算机中计算 0.1 + 0.2 时，由于精度损失，直接相加的结果不会恰好等于 0.3，而是一个非常接近但不等于 0.3 的浮点数，例如 0.30000000000000004。因此，当我们使用 == 进行严格相等性检查时，条件 0.1 + 0.2 == 0.3 会返回 False。
# 如果你希望在做这类浮点数比较时忽略微小误差，通常可以设定一个很小的阈值（epsilon），通过判断差值绝对值是否小于这个阈值来决定是否认为两者相等
print(0.1 + 0.2)  # 0.30000000000000004
print(0.1 + 0.2 == 0.3)
